﻿----在User表中：
----查找没有录入密码的用户
----删除用户名（UserName）中包含“Admin”或者“17bang”字样的用户

--SELECT UserName FROM [User] where Password  IS NULL
--DELETE [User]   where Username LIKE  N'%17bang%'
----在Problem表中：
----给所有悬赏（Reward）大于10的求助标题加前缀：【推荐】
----给所有悬赏大于20且发布时间（Created）在2019年10月10日之后的求助标题加前缀：【加急】
----删除所有标题以中括号【】开头（无论其中有什么内容）的求助
----查找Title中第5个起，字符不为“数据库”且包含了百分号（%）的求助
--UPDATE  [Problem]  SET Title =N'【推荐】'+Title 
--where Reward>10  

--UPDATE [Problem]  SET Title= N'【加急】'+Title 
--where Reward>20  AND PublishDateTime > '2019/10/10'
--SELECT * FROM Problem
--INSERT Problem(ID,Title,Reward,PublishDateTime) VALUES (4,N'【】',21,'2020/2/3')
--INSERT Problem(ID,Title,Reward,PublishDateTime) VALUES (4,N'【f】',21,'2020/2/3')

--DELETE [Problem] 
--where Title LIKE  N'【%】%'



--INSERT Problem(ID,Title,Reward,PublishDateTime) VALUES (5,N'     数据库',21,'2020/2/3')
--SELECT * FROM [Problem]
--DELETE Problem
--where  Title LIKE N'     数据库'AND Title LIKE  '%' ESCAPE '%'

-- --在Keyword表中：
----找出所有被使用次数（Used）大于10小于50的关键字名称（Name）
----如果被使用次数（Used）小于等于0，或者是NULL值，或者大于100的，将其更新为1
----删除所有使用次数为奇数的Keyword
----注意，上述作业需要自己插入数据进行测试
--SELECT [Name] FROM Keyword WHERE Used>10 AND Used<50
--SELECT [Name] FROM [Keyword] 
--where Used<=0 OR Used Is NULL OR Used>100
--UPDATE [Keyword]   SET  Used=1
--DELETE [Keyword] where Used %2=1

----在User表上的基础上：
----添加Id列，让Id成为主键
----添加约束，让UserName不能重复
--ALTER TABLE [User]
--DROP COLUMN Username
--ALTER TABLE [User]
--ADD UserName NVARCHAR(10) UNIQUE;

----在Problem表的基础上：
----为NeedRemoteHelp添加NOT NULL约束，再删除NeedRemoteHelp上NOT NULL的约束
----添加自定义约束，让Reward不能小于10
--ALTER TABLE Problem
--DROP COLUMN NeedRemoteHelp

--ALTER TABLE Problem
--Add NeedRemoteHelp  bit CONSTRAINT NRH_NOTNULL  NOT NULL;
--ALTER TABLE Problem
--DROP CONSTRAINT  NRH_NOTNULL;
--ALTER TABLE Problem
--ADD CONSTRAINT CK_Reward CHECK(Reward<1000)




----在Problem中插入不同作者（Author）不同悬赏（Reward）的若干条数据，以便能完成以下操作：
----查找出Author为“飞哥”的、Reward最多的3条求助
----所有求助，先按作者“分组”，然后在“分组”中按悬赏从大到小排序
----查找并统计出每个作者的：求助数量、悬赏总金额和平均值
----找出平均悬赏值少于10的作者并按平均值从小到大排序
----以Problem中的数据为基础，使用SELECT INTO，新建一个Author和Reward都没有NULL值的新表：NewProblem （把原Problem里Author或Reward为NULL值的数据删掉）
----使用INSERT SELECT, 将Problem中Reward为NULL的行再次插入到NewProblem中
--SELECT TOP 3 Reward FROM Problem 
--where Author=N'飞哥'
--ORDER BY Reward DESC 

--SELECT 
--Author,Reward,
--COUNT(*) AS [Count] 
--FROM Problem
--ORDER BY Author ,Reward DESC

--SELECT 
--Author,NeedRemoteHelp,
--COUNT(*) AS [Count] 
--FROM Problem
--GROUP BY Author ,NeedRemoteHelp

--SELECT 
--Author,
--SUM(Reward) 
--FROM Problem
--GROUP BY Author 

--SELECT 
--Author,
--AVG(Reward) 
--FROM Problem
--GROUP BY Author 

--SELECT 
--Author,
--AVG(Reward) 
--FROM Problem
--where Reward<10
--GROUP BY Author 
--ORDER BY Author  DESC

--SELECT Author, Reward
--INTO NewProblem 
--FROM Problem 
--WHERE Author IS NOT NULL AND Reward IS NOT NULL

--INSERT NewProblem 
--SELECT Author,Reward From Problem 
--WHERE Author IS NULL AND Reward IS NULL
--新建表Message(Id, FromUser, ToUser, UrgentLevel, Kind, HasRead, IsDelete, Content)，使用该表和SQL语句，证明：

----唯一约束依赖于唯一索引
----主键上可以是非聚集索引
--CREATE TABLE Message(Id INT, FromUser  NVARCHAR(10) CONSTRAINT UQ_Message_FromUser UNIQUE,ToUser NVARCHAR(10)
--,UrgentLevel  NVARCHAR(10), Kind NVARCHAR(10),HasRead NVARCHAR(10), IsDelete  NVARCHAR(10), 
--Content NVARCHAR(10),)
---- [type]：1 聚集; >1 非聚集
--SELECT [name], [type], is_unique, is_primary_key, is_unique_constraint 
--FROM sys.indexes 
--WHERE object_id = OBJECT_ID('Message')
--用户资料，新建用户资料（Profile）表，和User形成1:1关联（有无约束？）。用SQL语句演示：
--CREATE TABLE Profile( Id INT   ,  Gender BIT,Birthday DATE,KeyWord NVARCHAR(10) )
----新建一个填写了用户资料的注册用户
--INSERT Profile(Id    ,  Gender ,Birthday ,KeyWord ) VALUES(1,1,'2019/2/3','ASP.NET');
----通过Id查找获得某注册用户及其用户资料
--SELECT*FROM Profile WHERE Id=1
----删除某个Id的注册用户
--DELETE Profile
--WHERE Id=1
----帮帮点说明：新建Credit表，可以记录用户的每一次积分获得过程，即：某个用户，在某个时间，因为某某原因，获得若干积分
--CREATE TABLE Credit( Id INT   , [User]  NVARCHAR(10),   [GetDATE] DATE,GetBECAUSE NVARCHAR(10) )

----发布求助，在Problem和User之间建立1:n关联（含约束）。用SQL语句演示：
--ALTER TABLE Problem 
--ADD UserId INT
--ALTER TABLE Problem 
--ADD CONSTRAINT FK_USER_UserId FOREIGN KEY ([UserId]) REFERENCES[User](ID)
--SELECT*FROM Problem
----某用户发布一篇求助，
--INSERT Problem VALUES(8,N'C#',null,22,'2019/2/3',0,N'ls',1)
----将该求助的作者改成另外一个用户
--UPDATE Problem SET UserId=2 WHERE UserId=1
----删除该用户
--DELETE Problem WHERE [UserId]=2
--DELETE [User] WHERE Id=2
----求助列表：新建Keyword表，和Problem形成n:n关联（含约束）。用SQL语句演示：
--DROP TABLE KeyWord
--CREATE TABLE  KeyWord
--(ID INT PRIMARY KEY IDENTITY (1,1),
-- KeyWord NVARCHAR(50),)
-- CREATE TABLE KeyWordToProblem
--(
--KeyWordId INT CONSTRAINT FK_KeyWordToProblem_KeyWordId FOREIGN KEY REFERENCES KeyWord(Id),
--ProblemId INT CONSTRAINT FK_KeyWordToProblem_ProblemId FOREIGN KEY REFERENCES Problem(Id)
--)
----查询获得：每个求助使用了多少关键字，每个关键字被多少求助使用
--SELECT  COUNT(KeyWordId) ,KeyWordId FROM  KeyWordToProblem WHERE KeyWordId=2
--GROUP BY KeyWordId
--SELECT  COUNT(ProblemId) ,ProblemId FROM  KeyWordToProblem WHERE ProblemId=2
--GROUP BY ProblemId
----发布了一个使用了若干个关键字的求助
--SELECT *FROM Problem
--INSERT Problem VALUES (20,N'java',null,21,'2019/2/3',0,N'ls',1)
--INSERT KeyWordToProblem VALUES(1,2)
--INSERT KeyWordToProblem VALUES(2,2)
----该求助不再使用某个关键字
--DELETE   KeyWordToProblem WHERE ProblemId=1 AND KeyWordId=2
----删除该求助
--DELETE KeyWordToProblem WHERE ProblemId=2
--DELETE Problem WHERE ID=2
----删除某关键字
--DELETE KeyWordToProblem WHERE KeyWordId=1
--DELETE KeyWord WHERE ID=1

--联表查出求助的标题和作者用户名
--SELECT 
--P.[Title], -- Student表的Name 
--U.UserName
--FROM Problem P JOIN [User] U 
--ON P.Title = U.UserName 
----查找并删除从未发布过求助的用户
--DELETE 
-- [User] 
--FROM Problem P RIGHT JOIN [User] U ON P.UserId=U.Id
--WHERE P.Id IS NULL
----用一句SELECT显示出用户和他的邀请人用户名
--SELECT *FROM [User] U1  JOIN [User] U2
--ON U1.ID=U2.INVITEDBY
--17bang的关键字有“一级”“二级”和其他“普通（三）级”的区别：
--请在表Keyword中添加一个字段，记录这种关系


--DELETE KeyWord
--INSERT KeyWord VALUES(N'编程开发语言',1)
--INSERT KeyWord VALUES(N'SQL',2)
--INSERT KeyWord VALUES(N'JOIN',3)
--INSERT KeyWord VALUES(N'外连接',3)
--INSERT KeyWord VALUES(N'JAVAScript ',2)
--INSERT KeyWord VALUES(N'闭包',3)
--INSERT KeyWord VALUES(N'工具软件',1)
--INSERT KeyWord VALUES(N'VS',2)

--ALTER TABLE KeyWord 
--ADD Parent  INT


--UPDATE KeyWord SET Parent = 9 WHERE ID=10
--UPDATE KeyWord SET Parent = NUll  WHERE ID=9
--UPDATE KeyWord SET Parent = 10 WHERE ID=11
--UPDATE KeyWord SET Parent = 10  WHERE ID=12
--UPDATE KeyWord SET Parent = 9 WHERE ID=13
--UPDATE KeyWord SET Parent = 13  WHERE ID=14
--UPDATE KeyWord SET Parent = NULL WHERE ID=15
--UPDATE KeyWord SET Parent = 15 WHERE ID=16
--SELECT K1.KWord ,K2.KWord,K3.KWord FROM KeyWord K1 
--LEFT JOIN KeyWord K2
--ON K1.Parent = K2.Id
--LEFT JOIN KeyWord K3
--ON k2.Parent = k3.Id
--SELECT * FROM KeyWord
----然后用一个SELECT语句查出所有普通关键字的上一级、以及上上一级的关键字名称，比如：

----17bang中除了求助（Problem），还有意见建议（Suggest）和文章（Article），他们都包含Title、Content、PublishTime和Auhthor四个字段，但是：
----建议和文章没有悬赏（Reward）
----建议多一个类型：Kind NVARCHAR(20)）
----文章多一个分类：Category INT）
----请按上述描述建表。然后，用一个SQL语句显示某用户发表的求助、建议和文章的Title、Content，并按PublishTime降序排列
--CREATE TABLE [dbo].[Suggest] 
--(  
--	[Id] INT NOT NULL PRIMARY KEY,
--	Title NVARCHAR(30),
--	Content TEXT,
--	PublishDateTime DATE,
--	Author NVARCHAR(10),
--	Kind NVARCHAR(20)
--);
--CREATE TABLE [dbo].[Article] 
--(  
--	[Id] INT NOT NULL PRIMARY KEY,
--	Title NVARCHAR(30),
--	Content TEXT,
--	PublishDateTime DATE,
--	Author NVARCHAR(10),
--	Category INT
--);

SELECT PublishDateTime,Title,Content FROM Problem
UNION
SELECT PublishDateTime,Title,Content FROM Suggest 
UNION
SELECT PublishDateTime,Title,Content FROM Article 
ORDER BY PublishDateTime
--ALTER TABLE Suggest
--ADD UserId  INT NOT NULL
--ALTER TABLE Suggest -- 修改表 
--ADD CONSTRAINT FK1_User_Id -- 添加约束，指定约束名称，外键建议以FK开头，后跟表和列名 
--FOREIGN KEY (UserId) -- 约束类型：外键，且外键列为TeacherId 
--REFERENCES [User](Id) -- 外键表为Teacher，作为外键使用的列为Teacher上的Id
--ALTER TABLE  Article
--ADD UserId  INT NOT NULL
--ALTER TABLE Article -- 修改表 
--ADD CONSTRAINT FK2_User_Id -- 添加约束，指定约束名称，外键建议以FK开头，后跟表和列名 
--FOREIGN KEY (UserId) -- 约束类型：外键，且外键列为TeacherId 
--REFERENCES [User](Id) -- 外键表为Teacher，作为外键使用的列为Teacher上的Id

----为求助添加一个发布时间（TPublishTime），使用子查询：
--ALTER TABLE Problem
--ADD TPublishTime  DATE
----删除每个作者悬赏最低的求助
--DELETE Problem FROM Problem op
--WHERE Reward =(
--	SELECT MIN(Reward) FROM Problem ip 
--	WHERE op.Author=ip.Author
--)
----找到从未成为邀请人的用户
--SELECT * FROM [User]
----SELECT UserName FROM [User] 
--WHERE   UserName  NOT IN(
--	SELECT inviter  FROM [User] 
--	WHERE   inviter is not null
--)


----如果一篇求助的关键字大于3个，将它的悬赏值翻倍

--UPDATE Problem SET Reward=Reward*2 WHERE Id IN (
--SELECT ProblemId FROM KeyWordToProblem 
--GROUP BY ProblemId
--HAVING COUNT(*)>3)

----查出所有发布一篇以上（不含一篇）文章的用户信息
--SELECT Author FROM Problem 
--WHERE Content IS NOT NULL
--GROUP BY Author
--HAVING COUNT(*)>1

----查找每个作者最近发布的一篇文章
--SELECT Content FROM Problem op
--WHERE PublishDateTime =(
--	SELECT MAX(PublishDateTime) FROM Problem ip 
--	WHERE op.Author=ip.Author
--)
----查出每一篇求助的悬赏都大于5个帮帮币的作者
--SELECT Author FROM Problem 
--GROUP BY Author
--HAVING COUNT (Reward)>5

-- 分别使用派生表和CTE，查询求助表（表中只有一列整体的发布时间，没有年月的列），以获得：
--一起帮每月各发布了求助多少篇
--INSERT Problem (ID,Title,PublishDateTime,NeedRemoteHelp)VALUES(30,N'17bang','2019-2-3',1)
--INSERT Problem (ID,Title,PublishDateTime,NeedRemoteHelp)VALUES(31,N'17bang','2019-3-3',1)
--INSERT Problem (ID,Title,PublishDateTime,NeedRemoteHelp)VALUES(32,N'17bang','2020-3-3',1)




--SELECT Month(PublishDateTime), COUNT(PublishDateTime)   FROM Problem AS PDT
--WHERE PublishDateTime IS NOT NULL
--GROUP BY Month(PublishDateTime)  





----每月发布的求助中，悬赏最多的3篇
--SELECT * FROM 
--(
--    SELECT ROW_NUMBER() OVER(PARTITION BY Month(PublishDateTime),YEAR(PublishDateTime) ORDER BY Reward DESC)AS PDT , PublishDateTime
--    FROM Problem)PDT
--    WHERE PDT<=3
    
    

--    SELECT * FROM Problem





--UPDATE Problem SET PublishDateTime='2000/9/3' WHERE ID=10
--UPDATE Problem SET PublishDateTime='2010/5/3' WHERE ID=11
--UPDATE Problem SET PublishDateTime='2012/9/3' WHERE ID=12
--UPDATE Problem SET PublishDateTime='2013/10/3' WHERE ID=13



--SELECT  
----TOP 3 
--* FROM Problem op
--where Month(op.PublishDateTime) = (
--	SELECT  Month(PublishDateTime)
--	FROM Problem [ip]
--	WHERE [ip].PublishDateTime IS NOT NULL
--	AND []
--	--GROUP BY Month([ip].PublishDateTime)
--)
--ORDER BY Month(PublishDateTime), Reward desc

--,
--Problem WHERE Reward IN
--(SELECT  Month(PublishDateTime), 
--COUNT(PublishDateTime)   FROM Problem AS PDT
--WHERE PublishDateTime IS NOT NULL
--GROUP BY Month(PublishDateTime))
--ORDER BY Reward
--每个作者，每月发布的，悬赏最多的3篇

-- SELECT * FROM 
--(
--    SELECT ROW_NUMBER() OVER(PARTITION BY Month(PublishDateTime),YEAR(PublishDateTime),Author ORDER BY Reward DESC)AS PDT , PublishDateTime
--    FROM Problem)PDT
--    WHERE PDT<=3
----分别按发布时间和悬赏数量进行分页查询的结果

--SELECT * FROM Problem ORDER BY PublishDateTime
--OFFSET 0 ROWS
--FETCH NEXT 5 ROWS ONLY 
--SELECT * FROM Problem ORDER BY Reward
--OFFSET 0 ROWS
--FETCH NEXT 5 ROWS ONLY 



----创建求助的应答表 TResponse(Id, Content, AuthorId, ProblemId, CreateTime)
--CREATE TABLE TResponse
--(
--Id INT  NOT NULL PRIMARY KEY,
--Content TEXT,
--CreateTime DATETIME,
--AuthorId INT NOT NULL CONSTRAINT FK_Author_Id FOREIGN KEY(AuthorId) REFERENCES [User](Id) ,
--ProblemId INT NOT NULL CONSTRAINT FK_Problem_Id FOREIGN KEY(ProblemId) REFERENCES Problem(Id) 
--)




--然后生成一个视图VResponse(ResponseId, Content, AuthorId, AuthorName, ProblemId, ProblemTitle, CreateTime)，
--要求该视图：
--能展示
--应答作者的用户名、
--应答对应求助的
--  标题和
--  作者用户名
--只显示求助悬赏值大于5的数据
--已被加密
--保证其使用的基表结构无法更改
--只显示求助悬赏值大于5的数据
--已被加密
--保证其使用的基表结构无法更改

--   GO
--CREATE VIEW  V_VResponse
--WITH SCHEMABINDING ,ENCRYPTION
--AS 
--SELECT
--      R.ID ResponseId,
--      R.Content Content,
--      R.AuthorId ResponseAuthorId,
--      --RU.UserName   ResponseAuthorName,
--      R.ProblemId ProlemId,
--      --PU.UserName ProblemAuthorName,
--      --P.Title  ProblemTitle,
--      R.CreateTime CreatTime
--      FROM dbo.TResponse R
--           JOIN dbo.Problem P  ON R.ProblemId=P.Id
--           JOIN dbo.[User]  RU ON R.AuthorId=RU.Id
--           JOIN dbo.[User]  PU ON P.[ID]=PU.ID
--           WHERE Reward>5
--           WITH CHECK OPTION 

--    GO


--SELECT* FROM [User]
--SELECT * FROM V_VResponse
--SELECT * FROM Problem

--DROP VIEW  V_VResponse



--    INSERT V_VResponse
--    (
--       ResponseId,
--       Content,
--       ResponseAuthorId,
--       ProlemId,
--       CreatTime)
--    VALUES(1,N'java',1,11,'2019/2/3')
----演示：在VResponse中插入一条数据，却不能在视图中显示


----修改VResponse，让其能避免上述情形

----创建视图VProblemKeyword(ProblemId, ProblemTitle, ProblemReward, KeywordAmount)，要求该视图：
--GO
--CREATE VIEW V_VProblemKeyword
--WITH SCHEMABINDING ,ENCRYPTION
--AS
--SELECT 
--    P.Title     AS       ProblemTitle,
--    P.Reward     AS      ProblemReward,
--    PKC.KeywordAmount AS KeywordAmount
--FROM dbo.Problem P
--JOIN (
--SELECT
--    KP.ProblemId      ProblemId , 
--    --P.Title            ProblemTitle,
--    --P.Reward          ProblemReward,
--    COUNT( kp.KeyWordId )     KeywordAmount
--FROM dbo.KeyWordToProblem KP
--GROUP BY KP.ProblemId) PKC
--ON P.Id = PKC.ProblemId

--GO
--  DROP VIEW V_VProblemKeyword

----能反映求助的标题、使用关键字数量和悬赏



----在ProblemId上有一个唯一聚集索引
--CREATE UNIQUE CLUSTERED INDEX IX_ProblemId ON V_VProblemKeyword(ProblemId)

----在ProblemReward上有一个非聚集索引
--CREATE  UNIQUE INDEX IX_KeywordAmount ON V_VProblemKeyword( KeywordAmount)

----在基表中插入/删除数据，观察VProblemKeyword是否相应的发生变化
--INSERT Problem (Id,Reward,NeedRemoteHelp)VALUES(17,22,1)
--INSERT KeyWord(KWord)  VALUES(N'SQL')  
--INSERT Problem (Id,Reward,NeedRemoteHelp)VALUES(18,144,1)
--SELECT * FROM  Problem
--SELECT * FROM KeyWord
--SELECT * FROM TResponse
--SELECT * FROM V_VProblemKeyword
--UPDATE Problem SET Title=N'FG' WHERE Reward=20
--UPDATE Problem SET Title=N'FG' WHERE Reward=12
--UPDATE Problem SET Title=N'ls' WHERE Reward=123
--INSERT  Problem (Id ,Reward,NeedRemoteHelp)VALUES(199,123,1)



--SELECT 
--    P.Title     AS       ProblemTitle,
--    P.Reward     AS      ProblemReward,
--    PKC.KeywordAmount AS KeywordAmount
--FROM dbo.Problem P
--JOIN (
--SELECT
--    KP.ProblemId      ProblemId , 
--    --P.Title            ProblemTitle,
--    --P.Reward          ProblemReward,
--    COUNT( kp.KeyWordId )     KeywordAmount
--FROM dbo.KeyWordToProblem KP
--GROUP BY KP.ProblemId) PKC
--ON P.Id = PKC.ProblemId

--用户发布一篇悬赏币若干的求助（TProblem），他（TReigister）的帮帮币（BMoney）也会相应减少，
--但他的帮帮币总额不能少于0分：请综合使用TRY...CATCH和事务完成上述需求。

--SELECT * FROM Problem
--SELECT * FROM [User]
--CREATE  TABLE TReigister 
--(
--BMoney INT,
--UserId INT NOT NULL CONSTRAINT FK_User_Id FOREIGN KEY(UserId) REFERENCES [User](Id) 
--)

--UPDATE Problem SET UserId=1 WHERE ID=1

--INSERT TReigister( UserId) VALUES (1)

--UPDATE TReigister SET BMoney=10 WHERE UserId=1

--ALTER TABLE TReigister 
-- ADD CONSTRAINT CK_TReigister_BMoney CHECK(BMoney>=0)

-- BEGIN TRY 
-- BEGIN TRAN 
--   UPDATE TReigister SET BMoney-=20 WHERE UserId=1
--     END TRY 
--	  BEGIN CATCH
--	  THROW
--	  END CATCH
--COMMIT
--打印如下所示的等腰三角形： 
--      1

--    333

--  55555

--7777777


--DECLARE @n NVARCHAR(50) = N''
----WHILE (@n <1)
-- --BEGIN 
--   SET @n=SPACE(9)+N'1'
--   PRINT @n
--   SET @n=SPACE(7)+N'333'
--   PRINT @n
--   SET @n=SPACE(5)+N'55555'
--   PRINT @n
--   SET @n=SPACE(3)+N'777777'
--   PRINT @n
----END





----TProblem中：
----找出所有周末发布的求助（添加CreateTime列，如果还没有的话）
--DECLARE @n INT = 6
--   SET @n=@n%7
--PRINT @n
--SELECT CreateTime,*  FROM Problem 
--WHERE DATEDIFF(DAY,CreateTime,'2022/7/3')%7 =0 --周日
--SELECT CreateTime,*  FROM Problem 
-- WHERE DATEDIFF(DAY,CreateTime,'2022/7/3')%7 =1--周六

--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(200,1,'2022/3/6')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(201,1,'2022/3/1')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(202,1,'2022/2/9')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(203,1,'2022/4/8')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(204,1,'2022/2/9')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(205,1,'2022/3/13')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(206,1,'2022/3/12')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(207,1,'2022/2/20')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(208,1,'2022/4/19')
--INSERT Problem (ID,NeedRemoteHelp,CreateTime) VALUES(211,1,'2022/1/8')

----找出每个作者所有求助悬赏的平均值，精确到小数点后两位
--SELECT CAST(AVG(Reward)AS decimal (10,2) ) FROM Problem GROUP BY Author
----有一些标题以test、[test]或者Test-开头的求助，找打他们并把这些前缀都换成大写


--SELECT UPPER(Title) FROM Problem 
--WHERE 
--Title LIKE N'%#[test#]%' ESCAPE N'#' 
--OR Title LIKE N'Test%'
--OR Title LIKE N'Test%'
--OR Title LIKE N'test%'

--UPDATE Problem SET Title=N'[test]' WHERE ID>10 AND ID<20
--UPDATE Problem SET Title=N'Test' WHERE ID>20 AND ID<40
--SELECT * FROM Problem
----定义一个函数RANDINT(INT max)，可以取0-max之间的随机值
--GO
--CREATE FUNCTION RANDINT( @MAX INT)
--RETURNS INT
--AS
--BEGIN
--RETURN ABS(CHECKSUM(PWDENCRYPT(N'')))
--END
--go
--PRINT dbo.RANDINT(100)
--编写存储过程bp_user_register，模拟一起帮用户注册，包含以下逻辑：
--检查用户名是否重复。如果重复，返回错误代码：1
--检查用户名密码是否符合“长度不小于4位”的要求。如果不符合，返回错误代码：2
--如果有邀请人：
--检查邀请人是否存在，如果不存在，返回错误代码：10
--检查邀请码是否正确，如果邀请码不正确，返回错误代码：11
--将用户名、密码和邀请人存入数据库（TRegister）
--给邀请人增加10个帮帮点积分
--通知邀请人（TMessage中生成一条数据）某人使用了他作为邀请人。
--GO
--ALTER PROCEDURE bp_user_register
--@username NVARCHAR(10) =N'',
--@password NVARCHAR(10)=N'',
--@inviter NVARCHAR(10)= N'',
--@inviterword NVARCHAR(10) =N''
--AS
--BEGIN
--    IF(( SELECT COUNT(UserName) FROM [User] WHERE UserName=@username)=1)
--    RETURN 1   
--END
--BEGIN
--     IF(( SELECT COUNT(inviter) FROM  [User] WHERE inviter<>@inviter)IS NULL)
--     RETURN 10  
--END
--BEGIN 
--     IF((SELECT COUNT(inviterword) FROM [User] WHERE inviterword<>@inviterword )IS NULL)
--     RETURN 11
      
--END    
--BEGIN
--    IF LEN(@username)>4 OR LEN(@password)>4 
--    RETURN 2
--END
--BEGIN
--     PRINT '-----'
--     INSERT [User](ID,UserName,[Password],inviter,InviterWord) 
--     VALUES(((SELECT MAX(ID) ID FROM [User])+1),@username,@password,@inviter,@inviterword)
--     INSERT BangMoney(GetBBMoney, Because) 
--     VALUES(10, @inviter+N'成功邀请'+@username+N'奖励十点帮帮币')
     
--     INSERT [Message](FromUser,ToUser,HasRead,Content)
--     VALUES(@username,@inviter,0,@username+N'使用了他作为邀请人'+@inviter)
--END
--SELECT * FROM [Message]
--DECLARE @username NVARCHAR(10),
--        @password NVARCHAR(10),
--        @inviter NVARCHAR(10),
--        @inviterword NVARCHAR(10)
--DECLARE @RESULT INT
--EXECUTE @RESULT = bp_user_register N'CC',N'1202',N'FG',N'1324'
--PRINT @RESULT
--SELECT * FROM [User]
--CREATE TABLE [dbo].[BangMoney] (
--    ID       INT IDENTITY NOT NULL,
--    GetBBMoney INT          NOT NULL,
--    [Name]    NVARCHAR (25) NULL,
--    [Balance] INT           NULL,
--     Because NVARCHAR(30)  NULL,
--    CONSTRAINT [CK_BangMoney_Balance] CHECK ([Balance] >= (0))
--);
--DROP TABLE BangMoney
--SELECT * FROM BangMoney

SELECT [m].[Id], [m].[HasRead], [m].[SourceTime], [m].[UnRead]
FROM [Messages] AS [m]
ORDER BY [m].[UnRead]
